home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
doc.exe
/
STRINGS.DOC
< prev
next >
Wrap
Text File
|
1992-02-15
|
15KB
|
449 lines
─────────────────────────────────────────────────────────────────────────────
Dokumentation zur Datei: STRINGS.INC
─────────────────────────────────────────────────────────────────────────────
STRINGS.INC - Routinen zur Stringbearbeitung
(für den Assembler A86)
(c) Bernd Schemmer 1990 - 1992
Letzter Update: 15.02.1992
■ Beschreibung:
---------------
Alle Routinen und Macros dieser Datei erwarten einen String im
(Turbo-)Pascal-Format, d.h. mit führendem Längenbyte.
Der Aufbau eines Strings wie er von den Routinen erwartet wird
ist also folgendermaßen:
Offset | Bedeutung
----------+-----------------------------------------------
0 | Länge der folgenden Zeichenkette
| (OHNE dieses Byte, Binärzahl ohne Vorzeichen
| ->> max. Länge: 255 )
1..n | Zeichenkette
Die max. Länge eines Strings incl. Längen-Byte ist also 256 Byte.
■ Einschränkungen:
------------------
Die Routinen überrüfen NICHT ob ein korrekter String vorliegt.
Die Routinen gehen davon aus, daß für die jeweilige Aktion der
Speicherplatz des Strings ausreicht.
Strings dürfen nicht über eine Segment-Grenze gehen.
Es ist jeweils vermerkt, ob die Quell- und Zielstrings für die
Routinen gleich sein dürfen. (Eine Überprüfung findet nicht statt!)
Alle Routinen berücksichtigen leere Strings (->> Länge = 0).
Alle Routinen benutzen das Register AX als Arbeitsregister und
verändern das Directionflag.
■ Routinen:
-----------
Upcase - Konvertiert ein Zeichen in Großbuchstaben
Lowcase - Konvertiert ein Zeichen in Kleinbuchstaben
LowStr - Konvertiert einen String in Kleinbuchstaben
Upstr - Konvertiert einen String in Großbuchstaben
InsertChar - Fügt ein Zeichen in einem String ein
InsertStr - Fügt einen Teilstring in einem String ein
DelChar - Löscht ein Zeichen in einem String
DelStr - Löscht einen TeilString in einem String
DelChars - Löscht alle Vorkommen eines Zeichens in einem
String
StripChars - Ersetzt alle Teilketten aus einem Zeichen in
einem String durch ein Zeichen
PosChar - Ermittelt die Position eines Zeichens in einem
String
PosStr - Ermittelt die Position einer Zeichenkette in
einem String
NotPosChar - Ermittelt die Position des ersten Zeichens
ungleich einem vorgegebenen Zeichen in einem
String
CompareStr - Vergleicht zwei Strings
TranslateChars - Übersetzt alle Vorkommen eines Zeichens in
einem String in ein anderes
TranslateStr - Übersetzt einen String mit Hilfe zweier Tabellen
SubStr - Extrahiert einen Teilstring aus einem String
ParseStr - Trennt einen String ab einem vorgebbaren Zeichen
ConcatStr - Kettet zwei Strings zusammen
MoveStr - Kopiert einen String
DOSStrToStr - Konvertiert einen DOS-String ins Stringformat
StrToDOSStr - Konvertiert einen String ins DOS-Format
----------------------------
DeleteStr
Funktion: Macro zum Löschen eines Strings
Aufruf: DeleteStr
Eingabe: DS:SI -> String
Ausgabe: AL = Länge des Strings vor dem Löschen
Bes.: Der String wird nur logisch gelöscht (durch Setzen
des Längenzählers auf 0).
----------------------------
MakeStr
Funktion: Macro zum Erstellen eines Strings mit einer vorgebbaren
Anzahl gleicher Zeichen
Aufruf: MakeStr
Eingabe: ES:DI -> String
AL = Zeichen für den String
CL = Anzahl der Zeichen im String
Ausgabe: ES:DI -> String
----------------------------
CharToStr
Funktion: Macro für die Zuweisung eines Zeichens an einen String
Aufruf: CharToStr
Eingabe: DS:SI -> String
AL = Zeichen
Bes.: Der vorherige Inhalt des Strings wird überschrieben.
----------------------------
StrToChar
Funktion: Macro für die Konveriterunge eines Strings mit der Länge 1
in ein Zeichen
Aufruf: StrToChar
Eingabe: DS:SI -> String
Ausgabe: CF = 1 ->> Fehler
String hat mehr als ein Zeichen
CF = 0 ->> okax
AL = erstes und einziges Zeichen des Strings
----------------------------
Length
Funktion: Macro zur Ermittlung der Länge eines Strings
Aufruf: Length
Eingabe: DS:SI -> String
Ausgabe: CX = Länge des Strings
ZF = 1 ->> String ist leer
ZF = 0 ->> String ist nicht leer
----------------------------
Upcase
Funktion: Konvertierung eines Zeichens in einen Großbuchstaben
Eingbabe: AL = zu konvertierendes Zeichen
Ausgabe: AL = konvertiertes Zeichen
Bes.: Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
----------------------------
Lowcase
Funktion: Konvertierung eines Zeichens in einen Kleinbuchstaben
Eingbabe: AL = zu konvertierendes Zeichen
Ausgabe: AL = konvertiertes Zeichen
Bes.: Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
----------------------------
Upstr
Funktion: Konvertierung eines Strings in Großbuchstaben
Eingabe: DS:SI -> String
Bes.: Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
----------------------------
LowStr
Funktion: Konvertierung eines Strings in Kleinbuchstaben
Eingabe: DS:SI -> String
Bes.: Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
----------------------------
NotPosChar
Funktion: Ermittelt das erste Zeichen in einen String, das ungleich
dem vorgegebenen Zeichen ist
Eingabe: ES:DI -> String
AL = Zeichen
Ausgabe: ZF = 1 ->> AX = 0 ->> kein anderes Zeichen enthalten
oder der String ist leer
ZF = 0 ->> AX = Index des ersten Zeichens ungleich
dem vorgegebenen Zeichen
----------------------------
PosChar
Funktion: Testet, ob ein Zeichen im String enthalten ist
Eingabe: ES:DI -> String
AL = Zeichen, dessen Index gesucht ist
Ausgabe: ZF = 1 ->> AX = 0 ->> Zeichen ist nicht enthalten
ZF = 0 ->> AX = Index des Zeichens
Bes. Gefunden wird nur das erste Auftreten des Zeichens
im String.
----------------------------
InsertChar
Funktion: Einfügen eines Zeichens in einen String
Eingabe: ES:DI -> String
AL = einzufügende Zeichen
AH = Index der Einfügestelle. (0 < AH <= 255)
Bes.: Wird als Index 0 angegeben, so wird als Index 1 genommen.
Hat der String schon die max. Länge von 255 Zeichen,
so bricht die Routine mit einem Fehler ab.
Liegt die Einfügestelle hinter dem String-Inhalt, so wird
das Zeichen angefügt.
----------------------------
InsertStr
Funktion: Einfügen eines Strings in einen String
Eingabe: ES:DI -> String
DS:SI -> einzufügender String
AL = Index bei dem eingefügt werden soll
Ausgabe: CF = 0 ->> String eingefügt
CF = 1 ->> Fehler aufgetreten
Bes.: Die Strings müssen verschieden sein!
Wird als Index 0 angegeben, so wird als Index 1 genommen.
Übersteigt die Länge des Strings plus der Länge des
einzufügenden Strings 255, so bricht die Routine mit einem
Fehler ab.
Liegt die Einfügestelle hinter dem String-Inhalt, so wird
der neue String angefügt.
----------------------------
DelChars
Funktion: Löschen aller Vorkommen eines Zeichens aus einem String
Eingabe: DS:SI -> String
AL = zu löschendes Zeichen
Ausgabe: AX = Anzahl der gelöschten Zeichen
----------------------------
StripChars
Funktion: Ersetzt alle Teilketten im String, die nur aus dem
vorgegebenen Zeichen bestehen durch ein Zeichen
Beispiel: Die Zeichenkette 'aabbaaacdaraaa'
wird durch Aufruf der Routine mit AL = 'a'
zu 'abbacdara' konvertiert.
Eingabe: DS:SI -> String
AL = zu entfernendes Zeichens
Ausgabe: AX = Anzahl der entfernten Zeichen
----------------------------
DelChar
Funktion: Löschen eines Zeichens aus einem String
Eingabe: DS:SI -> String
AL = Index des zu löschenden Zeichens
Bes.: Wird als Index 0 angegeben, so wird als Index 1 genommen.
Ist der Index größer als die Länge des Strings,
so wird kein Zeichen gelöscht.
----------------------------
DelStr
Funktion: Löschen eines TeilStrings in einen String
Eingabe: DS:SI -> String
AL = Index ab dem gelöscht werden soll (incl.)
AH = Länge des zu löschenden TeilStrings
Bes.: Wird als Index 0 angegeben, so wird als Index 1 genommen.
Ist der Index größer als die Stringlänge, so wird nichts
gelöscht.
Wird als Länge des zu löschenden Teilstrings 0 angegeben,
so wird nichts gelöscht.
Falls die Länge des zu löschenden Teilstrings die Länge
des Rest-Strings ab den angegebenen Index übersteigt, so
wird nur der Rest-String gelöscht.
----------------------------
ConcatStr
Funktion: Zusammenketten der Strings in den Zielstring
Eingabe: ES:DI -> ZielString
DS:SI -> QuellString
Bes.: ZielString gleich QuellString ist erlaubt.
Falls die Länge von Zielstring + Quellstring größer
als 255 ist, wird nur der erste Teil des Quellstrings
übernommen.
----------------------------
MoveStr
Funktion: Kopiert den Quellstring in den Zielstring
Eingabe: DS:SI -> Quellstring
ES:DI -> Zielstring
Bes.: ZielString gleich QuellString ist erlaubt.
----------------------------
SubStr
Funktion: Kopiert den Quellstring ab den Index in den Zielstring
Eingabe: DS:SI -> Quellstring
ES:DI -> Zielstring
AL = Index, ab dem kopiert werden soll
AH = Länge des Teilstrings der kopiert werden soll
Bes.: ZielString sollte ungleich QuellString sein!
Wird als Index 0 angegeben, so wird als Index 1 genommen.
----------------------------
ParseStr
Funktion: Trennt einen String ab einem vorgegebenen Zeichen
Eingabe: DS:SI -> Quellstring
ES:DI -> Puffer für den Zielstring.
AL = Trennzeichen (wird in keinen Teil übernommen)
Ausgabe: DS:SI -> vorderer Teil
ES:DI -> hinterer Teil
Bes.: Zielstring muß ungleich Quellstring sein, bei mehreren
Vorkommen des Trennzeichens wird beim ersten Vorkommen
getrennt.
----------------------------
StrToDOSStr
Funktion: Konvertierung eines Strings ins DOS-Format
Eingabe: DS:SI -> Quellstring
ES:DI -> Zielstring
AL = Ende-Kennzeichen (0-Byte oder '$')
Bes.: Quellstring gleich Zielstring ist erlaubt.
----------------------------
DOSStrToStr
Funktion: Konvertierung eines DOS-Strings ins String-Format
(mit Zähler, ohne $ (bzw. 0) am Ende)
Eingabe: DS:SI -> Quellstring
ES:DI -> Zielstring (wird auf max. 255 Byte gekürzt)
AL = Ende-Kennzeichen (0-Byte oder '$')
Bes.: Zielstring gleich Quellstring ist nicht erlaubt.
Falls der Quellstring mehr als 255 Zeichen hat, werden
nur die ersten 255 Zeichen übernommen.
----------------------------
TranslateChars
Funktion: Übersetzt jedes im Quellstring vorkommende Qellzeichen
durch das Zielzeichen
Eingabe: ES:DI -> Quellstring
AL = Quellzeichen
AH = Zielzeichen
Ausgabe: BX = Anzahl der übersetzten Zeichen
----------------------------
PosStr
Funktion: Ermittelt den Index einer Zeichenkette in einem String
Eingabe: DS:SI -> TeilString
ES:DI -> String
Ausgabe: AX = Index (0 falls nicht vorhanden)
Bes.: Ein leerer Teilstring ist nie im String vorhanden.
----------------------------
CompareStr
Funktion: Vergleicht zwei Strings
Eingabe: DS:SI -> 1. String
ES:DI -> 2. String
Ausgabe: Flags wie nach CMP string1,string2
----------------------------
TranslateStr
Funktion: Übersetzt alle Zeichen aus dem Quellstring die im
Quellzeichen-String vorhanden sind durch das Zeichen
mit dem gleichen Index im Zielzeichen-String
Eingabe: ES:DI -> Quellstring
DS:SI -> Quellzeichen-String
DS:DX -> Zielzeichen-String
z.B. ES:DI -> String mit der Zeichenkette 'a.bcd#efgh1'
(= Quellstring)
DS:SI -> String mit der Zeichenkette '.#0123456789'
(= Quellzeichenstring)
DS:DX -> String mit der Zeichenkette ':^=!"$%&/()'
(= Zielzeichenstring)
Ergebnis: Der String ES:DI wird folgendermaßen konvertiert:
'a:bcd^efgh!'
^ ^ ^
Konvertiert wurden ──────────┴───┴────┘